package com.qr.factory;

import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Properties;

/**
 * 工厂模式解耦
 *      读取resources目录下的jdbc.properties创建对象
 */
public class BeanFactory {

    private static Properties properties;

    //先实例化，等用的时候在创建
    private static HashMap<String, Object> map;

    static {
        properties = new Properties();

        //获取当前项目下resources文件的流对象
        InputStream resourceAsStream = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
        try{
            //该方法需要传入一个流对象
            properties.load(resourceAsStream);

            //获取配置文件中所有的key
            Enumeration<Object> keys = properties.keys();

            //这个集合需要放在外面，保证这两个对象都会放在这一个集合当中
            map = new HashMap<>();

            while (keys.hasMoreElements()){

                //取出key
                String s = keys.nextElement().toString();

                //根据key取出值
                String property = properties.getProperty(s);

                //现在只是字符串，通过反射创建对象
                Object o = Class.forName(property).newInstance();

                //将字符串和bean对象放到map集合中，此时就相当于是bean的id和指定的对象
                map.put(s,o);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 根据key得到map中指定的对象
     * @return
     */
    public static Object getMap(String key){
        return map.get(key);
    }
}
